added SSCLI 1.0
[windows-sources.git] / sdk / samples / all in on code / Visual Studio 2010 / CSASPNETReverseAJAX / Client.cs
blobc0eb199aa51a6e5764bbf9049d6130c112784d30
1 /****************************** Module Header ******************************\
2 * Module Name: Client.cs
3 * Project: CSASPNETReverseAJAX
4 * Copyright (c) Microsoft Corporation
6 * Client class is used to synchronize the message sending and the message receiving.
7 * When DequeueMessage method is called, the method will wait until a new message
8 * is inserted by calling EnqueueMessage method. This class benefits ManualResetEvent
9 * class to achieve the synchronism.
11 * This source is subject to the Microsoft Public License.
12 * See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
13 * All other rights reserved.
15 \*****************************************************************************/
17 using System.Collections.Generic;
18 using System.Threading;
20 namespace CSASPNETReverseAJAX
22 /// <summary>
23 /// This class represents a web client which can receive messages.
24 /// </summary>
25 public class Client
27 private ManualResetEvent messageEvent = new ManualResetEvent(false);
28 private Queue<Message> messageQueue = new Queue<Message>();
30 /// <summary>
31 /// This method is called by a sender to send a message to this client.
32 /// </summary>
33 /// <param name="message">the new message</param>
34 public void EnqueueMessage(Message message)
36 lock (messageQueue)
38 messageQueue.Enqueue(message);
40 // Set a new message event.
41 messageEvent.Set();
45 /// <summary>
46 /// This method is called by the client to receive messages from the message queue.
47 /// If no message, it will wait until a new message is inserted.
48 /// </summary>
49 /// <returns>the unread message</returns>
50 public Message DequeueMessage()
52 // Wait until a new message.
53 messageEvent.WaitOne();
55 lock (messageQueue)
57 if (messageQueue.Count == 1)
59 messageEvent.Reset();
61 return messageQueue.Dequeue();